ECS Fargate で Windows コンテナを実行した場合にログが記録されないときの対処方法
困っていた内容
Fargate が Windows コンテナをサポートしたので、IIS のようこそ画面を表示する簡単なコンテナを構築しました。タスクのIPアドレスにアクセスすると、ようこそ画面は表示されたのですが、CloudWatch Logs にログが記録されていません。
タスク定義でawslogsを設定しているのですが、なぜログは記録されないのでしょうか?
どう対応すればいいの?
ログの出力方法を確認してください。
awslogs ログドライバーは標準出力・標準エラー出力の内容を CloudWatch Logs に転送しますが、IIS などの Windows アプリケーションの多くは Windows イベントログやログファイルにログを記録します。
awslogs ログドライバーを使用する - Amazon Elastic Container Service
デフォルトでは、キャプチャされるログは、コンテナをローカルに実行した場合にインタラクティブターミナルに表示されるコマンド出力 (STDOUT および STDERR I/O ストリーム) を示します。awslogs ログドライバーは、これらのログを Docker から CloudWatch Logs に渡します。
そのため、ログの出力方法を確認して、awslogs ログドライバーがログを収集できるように出力方法の変更をご検討ください。
Windows ログを標準出力に出力する方法
ひとつの手段として、Microsoftがオープンソースとして公開している「Microsoft Log Monitor」があります。
Microsoft Log Monitor は、ETW、イベントログ、カスタムログファイルを標準出力に転送するツールで、Windows、Server Core、Nanoイメージがサポートされています。
Windows Containers Log Monitor Opensource Release - Microsoft Tech Communityより引用
# イベントログ <Source>EventLog</Source><Time>2022-01-01T01:02:03.000Z</Time><LogEntry><Channel>System</Channel><Level>Information</Level><EventId>7036</EventId><Message>The Windows Insider Service service entered the running state.</Message></LogEntry> # カスタムログファイル 2022-01-01 01:02:03 10.0.1.2 GET / - 80 - 203.0.113.100 Mozilla/5.0+(Macintosh;+Intel+Mac+OS+X+10_15_7)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/98.0.4758.102+Safari/537.36 - 200 0 0 631